﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.Practices.Unity;
using System.Web.ModelBinding;
using ddcCajamarca.BusinessEntities.Directorio;
using ddcCajamarca.BusinessLogic.Directorio.Service;

namespace ddcCajamarca.Web.Directorio
{
    public partial class frmOrganizacion : System.Web.UI.Page
    {
        [Dependency]
        public IOrganizacionBL organizacionBL { get; set; }

        [Dependency]
        public IUbigeoBL ubigeoBL { get; set; }

        [Dependency]
        public ITipoOrganizacionBL tipoOrganizacionBL { get; set; }

        [Dependency]
        public ISubTipoInstitucionBL subTipoInstitucionBL { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
            var accion = Request.QueryString["accion"];
            var id = Request.QueryString["id"];
            if (!Page.IsPostBack)
            {
                if (accion != null && accion == "nuevo")
                {
                    txtId.Visible = false;
                    lbId.Visible = false;
                    lbTitulo.Text = "Registrar Organización";

                    var orga = new Organizacion();

                    BindTipoInfraestructuras(orga);

                    Cache.Insert("organizacion", orga);
                }
                else if (accion != null && id != null && accion == "editar")
                {
                    Int32 idOrgan = Int32.Parse(id);

                    var EditOrga = new Organizacion();

                    EditOrga = GetOrganizacionId(idOrgan);

                    Cache.Insert("organizacion", EditOrga);

                    BindTipoInfraestructuras(EditOrga);

                    ddlSubTipoOrganizacion.Enabled = true;
                    txtAmbiente.Enabled = true;
                }
                else if (accion != null && id != null && accion == "delete")
                {
                    Int32 idOrganizacion = Int32.Parse(id);

                    var orga = GetOrganizacionId(idOrganizacion);

                    String s = orga.Logo;

                    if (orga.Logo != "")
                    {
                        if (System.IO.File.Exists("C:/inetpub/wwwroot/ddcCajamarca/Images/Directorio/Organizaciones/" + s))
                        {
                            System.IO.File.Delete("C:/inetpub/wwwroot/ddcCajamarca/Images/Directorio/Organizaciones/" + s);
                        }
                    }

                    string msg = organizacionBL.DeleteOrganizacion(idOrganizacion);

                    if (msg == "")
                    {
                        Response.Redirect("frmListOrganizacion.aspx");
                    }
                    else
                    {
                        Response.Redirect("frmListOrganizacion.aspx");
                    }
                }
                else
                {
                    Response.Redirect("frmListOrganizacion.aspx");
                }
            }
        }

        public IEnumerable<Ubigeo> GetUbigeos()
        {
            return ubigeoBL.GetAllUbigeo();
        }

        public IEnumerable<TipoOrganizacion> GetOrganizaciones()
        {
            return tipoOrganizacionBL.GetAllTipoOrganizacion();
        }

        public IEnumerable<Organizacion> GetOrganizacionesLista()
        {
            return organizacionBL.GetAllOrganizaciones();
        }

        public Organizacion GetOrganizacionId([QueryString("id")] Int32? id)
        {
            if (id.HasValue)
                return organizacionBL.GetFromOrganizacionById(id.Value);
            return null;
        }

        public IEnumerable<SubTipoInstitucion> GetSubTiposbyTipo()
        {
            int idtipo = Int32.Parse(ddlTipoOrganizacion.SelectedValue);
            
            return subTipoInstitucionBL.GetAllSubTipoInstitucion(idtipo);         
        }

        public IEnumerable<SubTipoInstitucion> GetSubTiposbyTipoEdit(int id)
        {
            return subTipoInstitucionBL.GetAllSubTipoInstitucion(id);
        }

        public int GetOrganizacionbyRuc()
        {
            var accion = Request.QueryString["accion"];

            if (accion == "nuevo")
            {
                return organizacionBL.GetOrganizacionByDNI(txtRuc.Text, "Nuevo", 0);
            }
            else
            {
                return organizacionBL.GetOrganizacionByDNI(txtRuc.Text, "Editar", Int32.Parse(txtId.Text));
            }
        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            var accion = Request.QueryString["accion"];
            var id = Request.QueryString["id"];

            var existe = GetOrganizacionbyRuc();

            if (existe == 0)
            {
                if (accion != null && accion == "nuevo")
                {
                    InsertOrganizacion();
                }
            }
            else if (existe == 1)
            {
                if (accion != null && id != null)
                {
                    UpdateOrganizacion();
                }
            }
        }
        
        public void InsertOrganizacion()
        {
            var orgasac = Cache.Get("organizacion") as Organizacion;

            foreach (var row in lvDetalleInfra.Items)
            {
                var txtButacas = row.FindControl("txtButacas") as TextBox;
                var txtPie = row.FindControl("txtPie") as TextBox;
                var txtGraderias = row.FindControl("txtGraderias") as TextBox;
                var txtEquiposVisuales = row.FindControl("txtEquiposVisuales") as TextBox;
                var txtEquiposAudio = row.FindControl("txtEquiposAudio") as TextBox;

                if (txtButacas.Text == "")
                {
                    txtButacas.Text = "0";
                }
                if (txtPie.Text == "")
                {
                    txtPie.Text = "0";
                }
                if (txtGraderias.Text == "")
                {
                    txtGraderias.Text = "0";
                }

                orgasac.Infraestructura[row.DisplayIndex].Butacas = Int32.Parse(txtButacas.Text);
                orgasac.Infraestructura[row.DisplayIndex].Pie = Int32.Parse(txtPie.Text);
                orgasac.Infraestructura[row.DisplayIndex].Graderias = Int32.Parse(txtGraderias.Text);
                orgasac.Infraestructura[row.DisplayIndex].EquiposVisuales = txtEquiposVisuales.Text;
                orgasac.Infraestructura[row.DisplayIndex].EquiposAudio = txtEquiposAudio.Text;
                orgasac.Infraestructura[row.DisplayIndex].Aforo = Int32.Parse(txtButacas.Text) + Int32.Parse(txtPie.Text) + Int32.Parse(txtGraderias.Text);
            }

            BindTipoInfraestructuras(orgasac);

            Cache.Insert("organizacion", orgasac);

            String s = "";

            if (fuImagen.HasFile)
            {
                fuImagen.SaveAs("C:/inetpub/wwwroot/ddcCajamarca/Images/Directorio/Organizaciones/" + txtRuc.Text);
                s = txtRuc.Text;
            }
            orgasac.Ruc = txtRuc.Text;
            orgasac.Nombre = txtNombre.Text;
            orgasac.Direccion = txtDireccion.Text;
            orgasac.Telefono = txtTelefono.Text;
            orgasac.Telefono2 = txtTelefono2.Text;
            orgasac.Email = txtEmail.Text;
            orgasac.PaginaWeb = txtPaginaWeb.Text;
            orgasac.Logo = s;
            orgasac.IdUbigeo = ddlUbigeo.SelectedValue.ToString();
            orgasac.IdTipoOrganizacion = Int32.Parse(ddlTipoOrganizacion.SelectedValue);
            orgasac.InstituciónVinculada = Int32.Parse(ddlInstVinculada.SelectedValue);
            orgasac.IdSubTipoOrganizacion = Int32.Parse(ddlSubTipoOrganizacion.SelectedValue);

            if (ModelState.IsValid)
                organizacionBL.AddOrganizacion(orgasac);

            Response.Redirect("frmListOrganizacion.aspx");
        }

        public void UpdateOrganizacion()
        {
            var orga = GetOrganizacionId(Int32.Parse(txtId.Text));

            var orgasac = Cache.Get("organizacion") as Organizacion;

            foreach (var row in lvDetalleInfra.Items)
            {
                var txtButacas = row.FindControl("txtButacas") as TextBox;
                var txtPie = row.FindControl("txtPie") as TextBox;
                var txtGraderias = row.FindControl("txtGraderias") as TextBox;
                var txtEquiposVisuales = row.FindControl("txtEquiposVisuales") as TextBox;
                var txtEquiposAudio = row.FindControl("txtEquiposAudio") as TextBox;

                if (txtButacas.Text == "")
                {
                    txtButacas.Text = "0";
                }
                if (txtPie.Text == "")
                {
                    txtPie.Text = "0";
                }
                if (txtGraderias.Text == "")
                {
                    txtGraderias.Text = "0";
                }

                orgasac.Infraestructura[row.DisplayIndex].Butacas = Int32.Parse(txtButacas.Text);
                orgasac.Infraestructura[row.DisplayIndex].Pie = Int32.Parse(txtPie.Text);
                orgasac.Infraestructura[row.DisplayIndex].Graderias = Int32.Parse(txtGraderias.Text);
                orgasac.Infraestructura[row.DisplayIndex].EquiposVisuales = txtEquiposVisuales.Text;
                orgasac.Infraestructura[row.DisplayIndex].EquiposAudio = txtEquiposAudio.Text;
                orgasac.Infraestructura[row.DisplayIndex].Aforo = Int32.Parse(txtButacas.Text) + Int32.Parse(txtPie.Text) + Int32.Parse(txtGraderias.Text);
            }

            BindTipoInfraestructuras(orgasac);

            Cache.Insert("organizacion", orgasac);

            String s = "";

            if (fuImagen.HasFile)
            {
                fuImagen.SaveAs("C:/inetpub/wwwroot/ddcCajamarca/Images/Directorio/Organizaciones/" + txtRuc.Text);
                s = txtRuc.Text;
            }
            else
            {
                s = orgasac.Logo;
            }

            orgasac.Id = orga.Id;
            orgasac.Ruc = txtRuc.Text;
            orgasac.Nombre = txtNombre.Text;
            orgasac.Direccion = txtDireccion.Text;
            orgasac.Telefono = txtTelefono.Text;
            orgasac.Telefono2 = txtTelefono2.Text;
            orgasac.Email = txtEmail.Text;
            orgasac.PaginaWeb = txtPaginaWeb.Text;
            orgasac.Logo = s;
            orgasac.IdUbigeo = ddlUbigeo.SelectedValue.ToString();
            orgasac.IdTipoOrganizacion = Int32.Parse(ddlTipoOrganizacion.SelectedValue);
            orgasac.InstituciónVinculada = Int32.Parse(ddlInstVinculada.SelectedValue);
            orgasac.IdSubTipoOrganizacion = Int32.Parse(ddlSubTipoOrganizacion.SelectedValue);

            if (ModelState.IsValid)
                organizacionBL.UpdateOrganizacion(orgasac);

            Response.Redirect("frmListOrganizacion.aspx");
        }

        protected void lvDetalleInfra_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
            if (e.CommandName == "QuitarInfraestructura")
            {
                var nombreAmbiente = e.CommandArgument.ToString();

                var orgasac = Cache.Get("organizacion") as Organizacion;

                var detalleamb = orgasac.Infraestructura.SingleOrDefault(i => i.Ambientte.ToUpper().Equals(nombreAmbiente.ToUpper()));

                orgasac.Infraestructura.Remove(detalleamb);

                BindTipoInfraestructuras(orgasac);

                Cache.Insert("organizacion", orgasac);
            }
            else if (e.CommandName == "updateActualizar")
            {
                var orgasac = Cache.Get("organizacion") as Organizacion;

                foreach (var row in lvDetalleInfra.Items)
                {
                    var txtButacas = row.FindControl("txtButacas") as TextBox;
                    var txtPie = row.FindControl("txtPie") as TextBox;
                    var txtGraderias = row.FindControl("txtGraderias") as TextBox;
                    var txtEquiposVisuales = row.FindControl("txtEquiposVisuales") as TextBox;
                    var txtEquiposAudio = row.FindControl("txtEquiposAudio") as TextBox;

                    if (txtButacas.Text == "")
                    {
                        txtButacas.Text = "0";
                    }
                    if (txtPie.Text == "")
                    {
                        txtPie.Text = "0";
                    }
                    if (txtGraderias.Text == "")
                    {
                        txtGraderias.Text = "0";
                    }

                    orgasac.Infraestructura[row.DisplayIndex].Butacas = Int32.Parse(txtButacas.Text);
                    orgasac.Infraestructura[row.DisplayIndex].Pie = Int32.Parse(txtPie.Text);
                    orgasac.Infraestructura[row.DisplayIndex].Graderias = Int32.Parse(txtGraderias.Text);
                    orgasac.Infraestructura[row.DisplayIndex].EquiposVisuales = txtEquiposVisuales.Text;
                    orgasac.Infraestructura[row.DisplayIndex].EquiposAudio = txtEquiposAudio.Text;
                    orgasac.Infraestructura[row.DisplayIndex].Aforo = Int32.Parse(txtButacas.Text) + Int32.Parse(txtPie.Text) + Int32.Parse(txtGraderias.Text);
                }
            }
        }

        private void BindTipoInfraestructuras(Organizacion organizacion)
        {
            if (IsPostBack == false && organizacion.Id != 0)
            {
                txtId.Text = organizacion.Id.ToString();
                txtNombre.Text = organizacion.Nombre;
                txtRuc.Text = organizacion.Ruc;
                txtDireccion.Text = organizacion.Direccion;
                txtTelefono.Text = organizacion.Telefono;
                txtTelefono2.Text = organizacion.Telefono2;
                txtEmail.Text = organizacion.Email;
                txtPaginaWeb.Text = organizacion.PaginaWeb;
                ddlInstVinculada.SelectedValue = organizacion.InstituciónVinculada.ToString();
                idImg.ImageUrl = "~/Images/Directorio/Organizaciones/" + organizacion.Logo;
                ddlUbigeo.SelectedValue = organizacion.IdUbigeo;
                ddlTipoOrganizacion.SelectedValue = organizacion.IdTipoOrganizacion.ToString();
                ddlSubTipoOrganizacion.DataSource = GetSubTiposbyTipoEdit(Int32.Parse(organizacion.IdTipoOrganizacion.ToString()));
                ddlSubTipoOrganizacion.DataBind();
                ddlSubTipoOrganizacion.SelectedValue = organizacion.IdSubTipoOrganizacion.ToString();
            }

            lvDetalleInfra.DataSource = organizacion.Infraestructura;
            lvDetalleInfra.DataBind();
        }

        protected void btnAgregar_Click(object sender, EventArgs e)
        {
            var nombreAmbiente = txtAmbiente.Text;

            var orgasac = Cache.Get("organizacion") as Organizacion;

            var existe = orgasac.Infraestructura.SingleOrDefault(i => i.Ambientte.ToUpper().Equals(nombreAmbiente.ToUpper()));

            if (existe == null && !string.IsNullOrEmpty(nombreAmbiente))
            {
                var detalleambiente = new Infraestructura()
                {
                    Ambientte = txtAmbiente.Text
                };

                orgasac.Infraestructura.Add(detalleambiente);

                BindTipoInfraestructuras(orgasac);

                Cache.Insert("organizacion", orgasac);
            }
            txtAmbiente.Text = "";
        }

        protected void ddlTipoOrganizacion_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlTipoOrganizacion.SelectedValue != "1")
            {
                ddlSubTipoOrganizacion.DataSource = GetSubTiposbyTipo();
                ddlSubTipoOrganizacion.DataBind();

                ddlSubTipoOrganizacion.Enabled = true;
                txtAmbiente.Enabled = true;
            }
            else
            {
                ddlSubTipoOrganizacion.Enabled = false;
                txtAmbiente.Enabled = false;
            }
        }
    }
}